﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace MassIntellect.WorkIt
{
    public interface IWorkFrame : IPipe, ISerialize
    {
        Guid Id { get; set; }
        /// <summary>
        /// Возможность добавления новых каналов
        /// </summary>
        bool IsAllowAddingPipe { get; }
        bool IsAllowRemovePipe { get; }
        bool IsThrowException { get; set; }
        bool IsAutoDisableOnException { get; set; }
        bool IsEnabled { get; set; }
        bool IsPulseIfDisabled { get; set; }
        /// <summary>
        /// В случае исключения по указанному каналу будет отправлено исключение
        /// </summary>
        string ExceptionPipe { get; set; }
        State State { get; set; }
        /// <summary>
        /// Условия
        /// </summary>
        Condition Condition { get; set; }        
        IEnumerable<IPipe> Pipes { get; }
        /// <summary>
        /// Добавление нового канала с указанным ключём
        /// </summary>
        /// <param name="key"></param>
        void AddPipe(string key);
        bool RemovePipe(string key);
        IPipe this[string NameIndex] { get; }
        /// <summary>
        /// Лог-запись.        
        /// <para>Источник, параметры, описание.</para>
        /// </summary>
		event Action<IPipe, string> OnLog;
        /// <summary>
        /// Предупреждение.
        /// Источник, мнемокод, параметры, описание, признак продолжения
        /// </summary>
        event Func<IPipe, string, object[], string, bool> OnWarning;
		event Action<IPipe, string> OnEcho;
        /// <summary>
        /// Программное исключение.
        /// Источник, исключение, признак отключения кадра
        /// </summary>
        event Func<IPipe, Exception, bool> OnExcept;
    }
}
